<?php
use frontend\modules\yii2\widgets\layouts\markdown\Markdown;

$this->title = '格式化组件-formatter-Components组件';
$this->registerMetaTag([
    'name' => 'keywords',
    'content' => 'yii,yii2,框架,应用组件,Components,使用,教程,格式化组件,formatter'
]);
$this->registerMetaTag([
    'name' => 'description',
    'content' => '在繁杂的应用中，对于数据的格式化要求随处可见，Yii提供了Formatter数据格式化组件来完成格式化工作。'
]);


$html = [
    "概述" => <<<HTML
# Formatter格式化组件的使用
每个国家都有其独特的数据阅读方式，比如：中国习惯于年月日（如：2022年1月1日），而美国习惯于日月年（如：1/1/2022）。Formatter组件的作用就是提供了一系列常用的数据格式化方法以满足国际化定制，这些方法通常用`asXYZ()`的方式被调用，你可以通过`Yii::\$app->formatter`来访问这个组件，如：
```php
\$formatter = \Yii::\$app->formatter;

// output: January 1, 2014
echo \$formatter->asDate('2014-01-01', 'long');
 
// output: 12.50%
echo \$formatter->asPercent(0.125, 2);
 
// output: <a href="mailto:cebe@example.com">cebe@example.com</a>
echo \$formatter->asEmail('cebe@example.com'); 

// output: Yes
echo \$formatter->asBoolean(true); 
// it also handles display of null values:

// output: (Not set)
echo \$formatter->asDate(null); 
```

HTML,
    "config" => <<<HTML
## 配置举例 id=config
我们需要在配置文件中初始化组件，这里的配置是作为全局的默认配置。出于代码冗余和系统全局数据格式化统一的考虑，除非必要，否则不建议在每个子功能下使用局部格式化配置，全局配置如下：
```php
[
    'components' => [
        'formatter' => [
            'locate' => 'zh-CN',
            'nullDisplay' => '', //当格式化的内容是null的时候输出的内容
            'timeZone' => 'Asia/Shanghai', 
            'defaultTimeZone' => 'Asia/Shanghai',
            'timeFormat' => 'php:H:i:s',
            'dateFormat' => 'php:Y-m-d',
        ]
    ],
];
```
如果确实必要，可以使用如下局部配置方法：
```php
Yii::\$app->formatter->locale = 'en-US';
```

HTML,

    "locale" => <<<HTML
## 国际化配置（locale） id=locale
`Formatter`组件正是通过你配置的`locale`属性来判断应该使用哪个国家的数据格式化方法，默认的是：`en-US`，如果你的项目只是在中国使用，可以修改为`zh-CN`：
```php
'components' => [
    'formatter' => [
        'locale' => 'zh-CN'
    ]
]
```
国际化功能需要php扩展`intl`的支持，您可以通过`phpinfo()`或者命令行查看是否有安装：
```shell
php -i | grep intl
/usr/local/etc/php/conf.d/docker-php-ext-intl.ini,
intl
intl.default_locale => no value => no value
intl.error_level => 0 => 0
intl.use_exceptions => 0 => 0
```
如果有输出，则说明已安装，如果没有安装，可以考虑如下两种方案：
- 使用Yii官网提供的docker容器运行项目，[前往Codelab](/codelab/install/docker/yiisoft)；
- 如果你使用的是我们提供的容器（[lvzmen/php-fpm:8.0.7.1](/codelab/install/docker/custom)），那就需要安装一下icu和intl：
```shell
# 如果你没有安装大于50.1版本的icu-uc，则需要安装一下：
wget https://github.com/unicode-org/icu/releases/download/release-65-1/icu4c-65_1-src.tgz
tar -xf icu4c-65_1-src.tgz
cd icu/source
./configure --prefix=/usr
make
make install
```
有了icu-uc的支持，才能安装intl，进入容器后执行：
```shell
docker-php-ext-install intl
```

HTML,
    "date" => <<<HTML
## 时间格式化 id=format-time
`Formatter`组件实现了非常完善的日期格式化功能，它默认使用`ICU`格式，如果需要使用php格式，需要加上`php:`前缀，如：
```php
// ICU格式输出： 01/06/2022
echo Yii::\$app->formatter->asDate(time(), 'MM/dd/yyyy');

// PHP格式输出： 01/06/2022
echo Yii::\$app->formatter->asDate(time(), 'php:m/d/Y');
```
HTML,
    "timezone" => <<<HTML
### 时区设置（Timezone） id=timezone
我们在格式化日期的时候，首先应该确定日期所在的时区，`Formatter`组件提供了两个设置时区的属性：
```php
public \$timezone;
public \$defaultTimeZone = 'UTC';
```
值得注意的是，如果`\$timezone`没有被设置，则会首先使用应用主体的时区：
```php
\yii\base\Application::timeZone
```
php可以接受的时区列表可以参看php官网（[Timezone](https://www.php.net/manual/en/timezones.php)）；
HTML,
    "time" => <<<HTML
### 时间（Time） id=time
这是针对时分秒的格式化方法，使用方法如下：
```php
Yii::\$app->formatter->asTime(\$value, \$format = null);
```
第二个参数`\$format`用来指定时间格式，没有设置的话默认选择全局格式，您需要在组件中配置：
```php
'components' => [
    'formatter' => [
        'timeFormat' => 'php:H:i:s',
    ]
]
```
系统提供了4种常用的格式化策略，分别为：`short`、`medium`、`long`和`full`。你需要通过`timeFormat`属性进行指定，默认是`medium`，在`locale = 'en-US'`时，表现如下：
```php
// 输出：5:23 PM
Yii::\$app->formatter->timeFormat = 'short';
echo Yii::\$app->formatter->asTime(time());

// 输出：5:23:42 PM
Yii::\$app->formatter->timeFormat = 'medium';
echo Yii::\$app->formatter->asTime(time());

// 输出：5:24:11 PM GMT+8
Yii::\$app->formatter->timeFormat = 'long';
echo Yii::\$app->formatter->asTime(time());

// 输出：5:24:28 PM China Standard Time
Yii::\$app->formatter->timeFormat = 'full';
echo Yii::\$app->formatter->asTime(time());
```
HTML,
    "time.date" => <<<HTML
### 日期（Date） id=date
这是针对日月年的格式化方法，使用方法如下：
```php
Yii::\$app->formatter->asDate(\$value, \$format = null);
```
第二个参数`\$format`用来指定日期格式，没有设置的话默认选择全局格式，您需要在组件中配置：
```php
'components' => [
    'formatter' => [
        'dateFormat' => 'php:Y-m-d',
    ]
]
```
系统提供了4种常用的格式化策略，分别为：`short`、`medium`、`long`和`full`。你需要通过`dateFormat`属性进行指定，默认是`medium`，在`locale = 'en-US'`时，表现如下：
```php
// 输出：1/6/22
Yii::\$app->formatter->dateFormat = 'short';
echo Yii::\$app->formatter->asDate(time());

// 输出：Jan 6, 2022
Yii::\$app->formatter->dateFormat = 'medium';
echo Yii::\$app->formatter->asDate(time());

// 输出：January 6, 2022
Yii::\$app->formatter->dateFormat = 'long';
echo Yii::\$app->formatter->asDate(time());

// 输出：Thursday, January 6, 2022
Yii::\$app->formatter->dateFormat = 'full';
echo Yii::\$app->formatter->asDate(time());
```
HTML,
    "time.Datetime" => <<<HTML
### 日期时间（Datetime） id=datetime
这是设置完整时间的格式化方法，使用方法如下：
```php
Yii::\$app->formatter->asDatetime(\$value, \$format = null);
```
第二个参数`\$format`用来指定格式，没有设置的话默认选择全局格式，您需要在组件中配置：
```php
'components' => [
    'formatter' => [
        'datetimeFormat' => 'php:Y-m-d H:i:s'
    ]
]
```
系统提供了4种常用的格式化策略，分别为：`short`、`medium`、`long`和`full`。你需要通过`dateFormat`属性进行指定，默认是`medium`，在`locale = 'en-US'`时，表现如下：
```php
// 输出：1/7/22, 3:59 PM
Yii::\$app->formatter->datetimeFormat = 'short';
echo Yii::\$app->formatter->asDatetime(time());

// 输出：Jan 7, 2022, 3:59:17 PM
Yii::\$app->formatter->datetimeFormat = 'medium';
echo Yii::\$app->formatter->asDatetime(time());

// 输出：January 7, 2022 at 3:59:25 PM GMT+8
Yii::\$app->formatter->datetimeFormat = 'long';
echo Yii::\$app->formatter->asDatetime(time());

// 输出：Friday, January 7, 2022 at 3:59:33 PM China Standard Time
Yii::\$app->formatter->datetimeFormat = 'full';
echo Yii::\$app->formatter->asDatetime(time());
```
HTML,
    "timestamp" => <<<HTML
### 时间戳（Timestamp） id=timestamp
`Formatter`组件可已经将时间转换回时间戳格式（从`01-01-1970`到现在的秒数），举例如下：
```php
// 输出：1640966400
echo Yii::\$app->formatter->asTimestamp('2022-01-01');

// 输出：1640966461
echo Yii::\$app->formatter->asTimestamp('2022-01-01 00:01:01');
```
> 注意：传入的时间需要以`Y-m-d H:i:s`的格式传入，也可以传入`new DateTime()`的实例，如：
```php
echo Yii::\$app->formatter->asTimestamp(new DateTime('2011-01-01T15:03:01.012345Z'));
```

HTML,
    "number" => <<<HTML
## 数字格式化（number） id=number
在数据库中的数字一般都是纯数字的，不会出现以`,`为分隔的千分位，有时候小数位数也多，这就不利于报表的展示，如果每此查询数据就要作一次数据格式转换，代码就太冗余了，此时可以考虑在`Formatter`组件中全局配置：
```php
'components' => [
    'formatter' => [
        'decimalSeparator' => '.', //小数点分隔符，默认是'.'
        'thousandSeparator' => ',', //千分位分隔符，默认是','
    ]
]
```
其实这两个参数就是给PHP格式化函数`number_format()`用的。

HTML,
    "小数" => <<<HTML
### 浮点数（Decimal） id=decimal
浮点数格式化使用方法如下：
```php
// 输出： 123,456.79
echo Yii::\$app->formatter->asDecimal('123456.789', 2);
```
HTML,
    "整数" => <<<HTML
### 整数（Integer） id=integer
浮点数格式化使用方法如下：
```php
// 输出： 123,456
echo Yii::\$app->formatter->asInteger('123456.789');
```
HTML,
    "百分数" => <<<HTML
### 百分数（Percent） id=percent
百分数格式化使用方法如下：
```php
// 输出： 12.35%
echo Yii::\$app->formatter->asPercent(0.123456789, 2);
```
`asPercent()`的第二个参数是保留几位小数。
HTML,
    "spellout" => <<<HTML
### 文字（Spellout） id=spellout
以单词文字的形式表示数字：
```php
// 输出： 一亿二千三百四十五万六千七百八十九
Yii::\$app->formatter->locale = 'zh-CN';
echo Yii::\$app->formatter->asSpellout("123456789");

// 输出： one hundred twenty-three million four hundred fifty-six thousand seven hundred eighty-nine
Yii::\$app->formatter->locale = 'en-US';
echo Yii::\$app->formatter->asSpellout("123456789");
```
HTML,
    "二进制位" => <<<HTML
## 字节格式化（Size） id=size
使用字节格式化方法可以将字节（bytes）转换为有利于阅读的格式：
```php
// 输出： 1 gibibyte
echo Yii::\$app->formatter->asSize(1024 * 1024 * 1024);

// 输出： 1 GiB
echo Yii::\$app->formatter->asShortSize(1024 * 1024 * 1024);
```
HTML,
    "货币" => <<<HTML
## 货币格式化（Currency） id=currency
货币格式化可以把数字加上特殊字符的前缀，形成某个国家的货币形式，如：¥1.00，$1.00，£1.00。使用方法如下：
```php
echo Yii::\$app->formatter->asCurrency(\$value, \$currency = null);
```

第二个参数`\$currency`指定货币类型，如果没有指定的话会使用`locale`属性指定的国家，如：
```php
// 输出美元：$1.00
Yii::\$app->formatter->locale = 'en-US';
echo Yii::\$app->formatter->asCurrency(1);

// 输出人民币：¥1.00
Yii::\$app->formatter->locale = 'zh-CN';
echo Yii::\$app->formatter->asCurrency(1);
```
可以用第二个参数`\$currency`传入`ISO 4217`标准中的3个字母货币表示法，使用方法如下：
```php
// 输出欧元： €1.00
echo Yii::\$app->formatter->asCurrency(1, "EUR");

// 输出英镑： £1.00
echo Yii::\$app->formatter->asCurrency(1, "GBP");
```

HTML,
    "简写列表" => <<<HTML
ISO 4217:2008 《Currency codes》(货币代码) 的规定，规定了一个三个字母的字母代码和相当于3位数的代码来代表货币和资金，下面是参考列表：

|No.|国家(或地区)|货币中文名称|简写代码   |
|---|---|---|---|
|1|阿富汗|阿富汗尼|AFN|
|2|奥兰群岛|欧元|EUR|
|3|阿尔巴尼亚|列克|ALL|
|4|阿尔及利亚|阿尔及利亚第纳尔|DZD|
|5|美国萨摩亚|美国元|USD|
|6|安道尔|欧元|EUR|
|7|安哥拉|宽扎|AOA|
|8|安圭拉|東加勒比元|XCD|
|9|南极洲|没有通用货币||
|10|安提瓜和巴布达|東加勒比元|XCD|
|11|阿根廷|阿根廷比索|ARS|
|12|亚美尼亚|亚美尼亚DRAM|AMD|
|13|ARUBA|阿鲁班植物志|AWG|
|14|澳大利亚|澳元|AUD|
|15|奥地利|欧元|EUR|
|16|阿塞拜疆|阿塞拜疆马纳特|AZN|
|17|巴哈马（THE）|巴哈馬元|BSD|
|18|巴林|巴林第纳尔|BHD|
|19|孟加拉国|塔卡|BDT|
|20|巴巴多斯|巴巴多斯元|BBD|
|21|白俄罗斯|白俄罗斯卢布|BYR|
|22|比利时|欧元|EUR|
|23|伯利兹|本地货币为伯利兹元|BZD|
|24|贝宁|多哥非洲共同体法郎|XOF|
|25|百慕大|百慕大元|BMD|
|26|不丹|印度卢比|INR|
|27|不丹|恩格鲁姆|BTN|
|28|BOLIVIA（PLURINATIONAL STATE OF）|玻利维亚诺|BOB|
|29|BOLIVIA（PLURINATIONAL STATE OF）|MVDOL|BOV|
|30|BONAIRE，SINT EUSTATIUS和SABA|美国元|USD|
|31|波斯尼亚和黑塞哥维那|可兑换马克|BAM|
|32|博茨瓦纳|普拉|BWP|
|33|BOUVET ISLAND|挪威克朗|NOK|
|34|巴西|巴西皇家|BRL|
|35|英属印度洋地区（THE）|美国元|USD|
|36|文莱达鲁萨兰国|文莱元|BND|
|37|保加利亚|保加利亚列夫|BGN|
|38|BURKINA FASO|多哥非洲共同体法郎|XOF|
|39|布隆迪|布隆迪法郎|BIF|
|40|CABO VERDE|佛得角埃斯库多|CVE|
|41|柬埔寨|瑞尔|KHR|
|42|喀麦隆|法国法郎|XAF|
|43|加拿大|加拿大元|CAD|
|44|开曼群岛（THE）|开曼群岛元|KYD|
|45|中非共和国（THE）|法国法郎|XAF|
|46|CHAD|法国法郎|XAF|
|47|智利|智利的智利比索|CLP|
|48|智利|UF值|CLF|
|49|中国|元人民币|CNY|
|50|圣诞岛|澳元|AUD|
|51|COCOS（KEELING）群岛（THE）|澳元|AUD|
|52|哥伦比亚|哥伦比亚比索|COP|
|53|哥伦比亚|Unidad de Valor Real公司|COU|
|54|科摩罗（THE）|科摩罗法郎|KMF|
|55|刚果（民主共和国）|刚果法郎|CDF|
|56|刚果（THE）|法国法郎|XAF|
|57|库克群岛（THE）|新西兰元|NZD|
|58|哥斯达黎加|哥斯达黎加科郎|CRC|
|59|CÔTED'IVOIRE|多哥非洲共同体法郎|XOF|
|60|克罗地亚|库纳|HRK|
|61|CUBA|古巴比索|CUP|
|62|CUBA|可兑换比索|CUC|
|63|库拉索|荷兰安提列安盾|ANG|
|64|塞浦路斯|欧元|EUR|
|65|捷克共和国（THE）|捷克克朗|CZK|
|66|丹麦|丹麦克朗|DKK|
|67|吉布提|吉布提法郎|DJF|
|68|DOMINICA|東加勒比元|XCD|
|69|多米尼加共和国（THE）|多明尼加比索|DOP|
|70|厄瓜多尔|美国元|USD|
|71|埃及|埃及镑|EGP|
|72|萨尔瓦多|萨尔瓦多科隆|SVC|
|73|萨尔瓦多|美国元|USD|
|74|赤道几内亚|法国法郎|XAF|
|75|厄立特里亚|纳卡法|ERN|
|76|爱沙尼亚|欧元|EUR|
|77|埃塞俄比亚|埃塞俄比亚比尔|ETB|
|78|欧洲联盟|欧元|EUR|
|79|FALKLAND ISLANDS（THE）[MALVINAS]|福克兰镑|FKP|
|80|法罗群岛（THE）|丹麦克朗|DKK|
|81|FIJI|斐济元|FJD|
|82|芬兰|欧元|EUR|
|83|法国|欧元|EUR|
|84|法属圭亚那|欧元|EUR|
|85|法国波利尼西亚|CFP法郎|XPF|
|86|法属南部地区（THE）|欧元|EUR|
|87|加蓬|法国法郎|XAF|
|88|GAMBIA（THE）|达拉西|GMD|
|89|GEORGIA|拉里|GEL|
|90|德国|欧元|EUR|
|91|加纳|加纳塞地|GHS|
|92|直布罗陀|直布罗陀镑|GIP|
|93|希腊|欧元|EUR|
|94|格陵兰|丹麦克朗|DKK|
|95|格林纳达|東加勒比元|XCD|
|96|瓜德罗普|欧元|EUR|
|97|关岛|美国元|USD|
|98|危地马拉|格查尔|GTQ|
|99|根西岛|英镑|GBP|
|100|几内亚|几内亚法郎|GNF|
|101|几内亚比绍|多哥非洲共同体法郎|XOF|
|102|圭亚那|圭亚那元|GYD|
|103|海地|古德|HTG|
|104|海地|美国元|USD|
|105|HEARD ISLAND和麦克唐纳群岛|澳元|AUD|
|106|圣诞节（THE）|欧元|EUR|
|107|洪都拉斯|伦皮拉|HNL|
|108|香港|香港元|HKD|
|109|匈牙利|福林|HUF|
|110|冰岛|冰岛克郎|ISK|
|111|印度|印度卢比|INR|
|112|印度尼西亚|卢比亚|IDR|
|113|国际货币基金组织（IMF）|特别提款权|XDR|
|114|伊朗（伊斯兰共和国）|伊朗里亚尔|IRR|
|115|伊拉克|伊拉克第纳尔|IQD|
|116|爱尔兰|欧元|EUR|
|117|人岛|英镑|GBP|
|118|以色列|以色列新谢克尔|ILS|
|119|意大利|欧元|EUR|
|120|牙买加|牙买加元|JMD|
|121|日本|日元|JPY|
|122|JERSEY|英镑|GBP|
|123|约旦|约旦第纳尔|JOD|
|124|哈萨克斯坦|滕格|KZT|
|125|肯尼亚|肯尼亚先令|KES|
|126|基里巴斯|澳元|AUD|
|127|韩国（民主人民共和国）|朝鲜元|KPW|
|128|韩国（共和国）|赢了|KRW|
|129|科威特|科威特第纳尔|KWD|
|130|吉尔吉斯斯坦|SOM|KGS|
|131|老挝人民民主共和国（THE）|基普|LAK|
|132|拉脱维亚|欧元|EUR|
|133|黎巴嫩|黎巴嫩镑|LBP|
|134|莱索托|洛蒂|LSL|
|135|莱索托|兰德|ZAR|
|136|利比里亚|利比里亚元|LRD|
|137|利比亚|利比亚第纳尔|LYD|
|138|列支敦士登|瑞士法郎|CHF|
|139|立陶宛|欧元|EUR|
|140|卢森堡|欧元|EUR|
|141|澳门|澳门币|MOP|
|142|马其顿（前南斯拉夫共和国）|代纳尔|MKD|
|143|马达加斯加|马达加斯加阿里亚里|MGA|
|144|马拉维|马拉维克瓦查|MWK|
|145|马来西亚|马来西亚吉特|MYR|
|146|马尔代夫|鲁菲亚|MVR|
|147|马里|多哥非洲共同体法郎|XOF|
|148|马耳他|欧元|EUR|
|149|马歇尔群岛（THE）|美国元|USD|
|150|马提尼克岛|欧元|EUR|
|151|毛里塔尼亚|奥古亚|MRO|
|152|毛里求斯|毛里求斯卢比|MUR|
|153|MAYOTTE|欧元|EUR|
|154|非洲发展银行集团成员国|亚行账户单位|XUA|
|155|墨西哥|墨西哥比索|MXN|
|156|墨西哥|墨西哥Unidad de Inversion（UDI）|MXV|
|157|MICRONESIA（联邦国家）|美国元|USD|
|158|摩尔多瓦（共和国）|莫尔多凡|MDL|
|159|MONACO|欧元|EUR|
|160|蒙古|图格里克|MNT|
|161|黑山|欧元|EUR|
|162|MONTSERRAT|東加勒比元|XCD|
|163|摩洛哥|迪拉姆|MAD|
|164|莫桑比克|莫三比克梅蒂卡尔|MZN|
|165|缅甸|凯特|MMK|
|166|纳米比亚|纳米比亚元|NAD|
|167|纳米比亚|兰德|ZAR|
|168|瑙鲁|澳元|AUD|
|169|尼泊尔|尼泊尔卢比|NPR|
|170|荷兰（THE）|欧元|EUR|
|171|新CALEDONIA|CFP法郎|XPF|
|172|新西兰|新西兰元|NZD|
|173|尼加拉瓜|科尔多瓦奥罗|NIO|
|174|尼日尔（THE）|多哥非洲共同体法郎|XOF|
|175|尼日利亚|奈拉|NGN|
|176|纽埃|新西兰元|NZD|
|177|诺福克岛|澳元|AUD|
|178|北马里亚纳群岛（THE）|美国元|USD|
|179|挪威|挪威克朗|NOK|
|180|阿曼|阿曼里亚尔|OMR|
|181|巴基斯坦|巴基斯坦卢比|PKR|
|182|帛琉|美国元|USD|
|183|巴勒斯坦，国家|没有通用货币||
|184|巴拿马|巴尔博亚|PAB|
|185|巴拿马|美国元|USD|
|186|巴布亚新几内亚|基那|PGK|
|187|巴拉圭|瓜拉尼|PYG|
|188|秘鲁|溶胶|PEN|
|189|菲律宾（THE）|菲律宾比索|PHP|
|190|皮特凯恩|新西兰元|NZD|
|191|波兰|茨洛蒂|PLN|
|192|葡萄牙|欧元|EUR|
|193|PUERTO RICO|美国元|USD|
|194|卡塔尔|卡塔尔里亚尔|QAR|
|195|团圆|欧元|EUR|
|196|罗马尼亚|罗马尼亚列伊|RON|
|197|俄罗斯联邦（THE）|卢布|RUB|
|198|卢旺达|卢旺达法郎|RWF|
|199|SAINTBARTHÉLEMY|欧元|EUR|
|200|SAINT HELENA，ASCENSION和TRISTAN DA CUNHA|圣赫勒拿镑|SHP|
|201|SAINT KITTS和NEVIS|東加勒比元|XCD|
|202|SAINT LUCIA|東加勒比元|XCD|
|203|圣马丁（法国部分）|欧元|EUR|
|204|SAINT PIERRE和MIQUELON|欧元|EUR|
|205|SAIN VINCENT和GRENADINES|東加勒比元|XCD|
|206|SAMOA|塔拉|WST|
|207|圣马力诺|欧元|EUR|
|208|圣多美和普林西比|多布拉|STD|
|209|沙特阿拉伯|沙特里亚尔|SAR|
|210|塞内加尔|多哥非洲共同体法郎|XOF|
|211|塞尔维亚|第纳尔|RSD|
|212|塞舌尔|塞舌尔卢比|SCR|
|213|塞拉利昂|利昂|SLL|
|214|新加坡|新加坡元|SGD|
|215|SINT MAARTEN（荷兰部分）|荷兰安提列安盾|ANG|
|216|SISTEMA UNITARIO DE COMPENSACION REGIONAL DE PAGOS“SUCRE”|苏克雷|XSU|
|217|斯洛伐克|欧元|EUR|
|218|斯洛文尼亚|欧元|EUR|
|219|索罗蒙群岛|所罗门群岛元|SBD|
|220|索马里|索马里先令|SOS|
|221|南非|兰德|ZAR|
|222|南乔治亚和南三明治岛|没有通用货币||
|223|南苏丹|南苏丹镑|SSP|
|224|西班牙|欧元|EUR|
|225|斯里兰卡|斯里兰卡卢比|LKR|
|226|苏丹（THE）|苏丹镑|SDG|
|227|苏里南|苏里南元|SRD|
|228|SVALBARD和JAN MAYEN|挪威克朗|NOK|
|229|斯威士兰|利兰格尼|SZL|
|230|瑞典|瑞典克朗|SEK|
|231|瑞士|瑞士法郎|CHF|
|232|瑞士|欧元汇率|CHE|
|233|瑞士|威廉法郎|CHW|
|234|叙利亚阿拉伯共和国|叙利亚镑|SYP|
|235|台湾（中国）|新台币|TWD|
|236|塔吉克斯坦|索莫尼|TJS|
|237|坦桑尼亚联合共和国|坦桑尼亚先令|TZS|
|238|泰国|泰铢|THB|
|239|东帝汶|美国元|USD|
|240|TOGO|多哥非洲共同体法郎|XOF|
|241|托克劳|新西兰元|NZD|
|242|汤加|帕安加|TOP|
|243|特立尼达和多巴哥|特立尼达和多巴哥元|TTD|
|244|突尼斯|第纳尔|TND|
|245|火鸡|土耳其里拉|TRY|
|246|土库曼斯坦|土库曼斯坦新马纳特|TMT|
|247|特克斯和凯科斯群岛（THE）|美国元|USD|
|248|TUVALU|澳元|AUD|
|249|乌干达|乌干达先令|UGX|
|250|乌克兰|赫里夫尼亚|UAH|
|251|阿拉伯联合酋长国（THE）|阿联酋迪拉姆|AED|
|252|大不列颠及北爱尔兰联合王国（英国）|英镑|GBP|
|253|美国少数岛屿（THE）|美国元|USD|
|254|美利坚合众国（美国）|美国元|USD|
|255|美利坚合众国（美国）|美元（第二天）|USN|
|256|乌拉圭|乌拉圭比索|UYU|
|257|乌拉圭|乌拉圭比索（乌拉圭）|UYI|
|258|乌兹别克斯坦|乌兹别克斯坦和|UZS|
|259|瓦努阿图|瓦图|VUV|
|260|委内瑞拉（玻利瓦尔共和国）|玻利瓦尔|VEF|
|261|越南|董|VND|
|262|维尔京群岛（英国）|美国元|USD|
|263|维尔京群岛（美国）|美国元|USD|
|264|WALLIS和FUTUNA|CFP法郎|XPF|
|265|撒哈拉沙漠西部|迪拉姆|MAD|
|266|也门|也门里亚尔|YER|
|267|赞比亚|赞比亚克瓦查|ZMW|
|268|津巴布韦|津巴布韦元|ZWL|
|269|ZZ01_Bond Markets Unit European_EURCO|债券市场单位欧洲综合单位（EURCO）|XBA|
|270|ZZ02_Bond Markets Unit European_EMU-6|债券市场单位欧洲货币单位（E.M.U.-6）|XBB|
|271|ZZ03_Bond Markets Unit European_EUA-9|债券市场单位欧洲账户单位9（E.U.A.-9）|XBC|
|272|ZZ04_Bond Markets Unit European_EUA-17|债券市场单位欧洲账户单位17（E.U.A.-17）|XBD|
|273|ZZ06_Testing_Code|专门为测试目的保留的代码|XTS|
|274|ZZ07_No_Currency|为不涉及货币的交易分配的代码|XXX|
|275|ZZ08_Gold|黄金|XAU|
|276|ZZ09_Palladium|钯|XPD|
|277|ZZ10_Platinum|铂金|XPT|
|278|ZZ11_Silver|银|XAG|


HTML,
    "重量" => <<<HTML
## 重量（Weight） id=weight
默认以千克为单位，它有两种方法，一种使用完整单位，一种使用简写单位，常用的简写单位使用方法如下：
```php
// 输出：1.00 kg
Yii::\$app->formatter->locale = 'en-US';
echo Yii::\$app->formatter->asShortWeight(1, 2);

// 输出：1.00千克
Yii::\$app->formatter->locale = 'zh-CN';
echo Yii::\$app->formatter->asShortWeight(1, 2);
```
完整的单位使用方法如下：
```php
// 输出：1.00 kilogram
Yii::\$app->formatter->locale = 'en-US';
echo Yii::\$app->formatter->asWeight(1, 2);
```

HTML,
    "长度" => <<<HTML
## 长度（Length） id=length
默认以米为单位，它有两种方法，一种使用完整单位，一种使用简写单位，常用的简写单位使用方法如下：
```php
// 输出：1.00 m
Yii::\$app->formatter->locale = 'en-US';
echo Yii::\$app->formatter->asShortLength(1, 2);

// 输出：1.00米
Yii::\$app->formatter->locale = 'zh-CN';
echo Yii::\$app->formatter->asShortLength(1, 2);
```
完整的单位使用方法如下：
```php
// 输出：1.00 meter
Yii::\$app->formatter->locale = 'en-US';
echo Yii::\$app->formatter->asLength(1, 2);
```
`asLength()`的第二个参数是小数位数。
HTML,
    "" => <<<HTML

HTML,
];

// php intl安装： https://www.24kplus.com/linux/1564.html
//Yii::$app->formatter->locale = 'en-US';
// Yii::$app->formatter->datetimeFormat = 'full';
// echo Yii::$app->formatter->asDatetime(time());
// die;
//Yii::$app->formatter->locale = 'zh-CN';
//echo Yii::$app->formatter->asSpellout("123456789");die;

echo Markdown::widget(["content" => implode("\n", $html)]);

